package cn.com.dhcc.turbo.service.exch.filedata;

import cn.com.dhcc.app.core.util.Status;
import cn.com.dhcc.turbo.entity.exch.CrossNetTmpFileData;
import cn.com.dhcc.turbo.entity.exch.FileData;
import cn.com.dhcc.turbo.entity.exch.RecvFileData;
import cn.com.dhcc.turbo.entity.exch.SendFileData;

import java.io.File;
import java.util.List;

/**
 * 数据交换生命周期
 * 1、接收发送数据（多种形式:xml、文件、数据库数据）
 * 2、校验报文的合法性
 * 3、数据落地，将数据临时存储至本地仓库
 * 4、将数据发送至传输通道
 * 5、将数据从传输通道拿出来
 * 6、数据落地，将数据临时存储至本地仓库
 * 7、通知收信人数据到达
 * 8、通知发信人数据送达情况
 * 
 * 00数据传递的发送状态和路由信息的更新(贯穿于数据交换的整个生命周期)
 * 00发送异常的数据清理机制(独立于数据交换的生命周期)
 * 
 * 11跨网段数据导出
 * 22跨网段数据读取
 */
public interface FileDataExchageLifecycle {
	/**
	 * 1、校验数据的合法性
	 * 2、校验数据发送者的权限(暂时不实现)
	 * @param fileDataPosthead
	 * @return
	 */
	public Status validate(File fileDataPosthead);
	
	public String  checkToDB(String postname,String authCode,String metadata,String fromAdapter,List<String> fileItems);
	/**
	 * 将数据进行数据库存储，同时对文件进行校验
	 */
	public String checkToDB(String postname,String authCode,String metadata,String fromAdapter,String remoteIp,List<String> fileItems);
	
	
	/**
	 * 将数据发送
	 * 1、定时机制
	 * 2、实时触发机制
	 * @return
	 */
	public Status sendDataLocalSys();
	public Status waitCarvedDiscsCrossNet();
	public Status waitCarvedDiscs();
	/**
	 * 从内网到外网需要刻盘
	 * @return
	 */
	public Status carvedDiscs(FileData fileData);
	
	public Status sendDataToOuterSendPipeline();
	/**
	 * 将数据发送至传输管道
	 * 1、定时机制
	 * 2、实时触发机制
	 * @return
	 */
	public Status sendDataToPipline();
	
	public Status outerEntrepotStore();
	public Status outerGAP();
	public Status  innerEntrepotStore();
	public Status sendDataToInnerSendPipline();
	/**
	 * 将数据进行远端仓库存储
	 * @return
	 */
	public Status remoteStore();

	/**
	 * 通知收信人
	 * 1、对于常规数据和数据库数据，直接将消息发送给对方
	 * 2、对于大文件，只通知对方文件已经到达，需要对方自己到FTP服务器获取文件
	 * @return
	 */
	public Status notifyReceiver();
	
	public void processLost();
    /**
     * 发送本地通知状态
     */

    public Status sendLocalResp();

    /**
	 * 发送远端接收状态
	 */
    public   Status sendRemoteResp();
    /**
     * 解析远端接收状态，并入库
     */
    public   Status  parseRemoteResp();
    /**
     * 解析远端通知状态，并入库
     */
    public Status parseLocalResp();


    /**
     * 通知发件人
     * @return
     */
	public Status notifySender();

	/**
	 * 更新数据传递的发送状态和路由信息
	 * 注意，这个操作散布在上述几个生命中期之中,本地状态。发送表
	 * @return
	 */
	public Status updateLocalSendStatus(List<SendFileData> dataList, String status);
    /**
     * 更新数据传递的发送状态和路由信息
     * 注意，这个操作散布在上述几个生命中期之中，远程状态，接收表
     * @return
     */
    public Status updateRemoteSendStatus(List<RecvFileData> dataList, String status);
    
    /**
     * 更新数据传递的发送状态和路由信息
     * 注意，这个操作散布在上述几个生命中期之中，远程状态，接收表
     * @return
     */
    public Status updateCrossSendStatus(List<CrossNetTmpFileData> dataList, String status);

    /**
     * 更新数据传递的通知状态和路由信息
     * 注意，这个操作散布在上述几个生命中期之中，远程状态，接收表
     * @return
     */
    public Status updateLocalNotityStatus(List<SendFileData> dataList, String status);
    /**
     * 更新数据传递的通知状态和路由信息
     * 注意，这个操作散布在上述几个生命中期之中，远程状态，接收表
     * @return
     */
    public Status updateRemoteNotityStatus(List<RecvFileData> dataList, String status);


	
	/**
	 * 跨网输出
	 * @return
	 */
	public Status crossNetOutput();
	
	
	/**
	 * 跨网输入
	 * @return
	 */
	public Status crossNetInput();
	public Status cleanUpFtpHome();
}
